package com.AdvancedDemos.FileAndIO;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class 文件拷贝 {
    public static void main(String[] args) throws IOException {
        //helloworld\src\com\AdvancedDemos\FileAndIO\from
        //helloworld\src\com\AdvancedDemos\FileAndIO\to
        //从from中拷贝文件到to
        //拷贝的文件和原始文件大小要完全相同,要可用

        //1.单字节拷贝文件
        File file = new File("helloworld\\src\\com\\AdvancedDemos\\FileAndIO\\from\\test.png");
//        if (file.length() > Integer.MAX_VALUE) {
//            throw new RuntimeException("文件过大");
//        }
        FileInputStream from = new FileInputStream(file);
        FileOutputStream to = new FileOutputStream("helloworld\\src\\com\\AdvancedDemos\\FileAndIO\\to\\copy.png");

//        byte[] froms = from.readAllBytes();//使用readAllBytes要注意文件不能过大两个多G
        byte[] bytes = new byte[1024 * 1024];//每次读1MB
        int count;
        while ((count = from.read(bytes)) != -1) {
            System.out.println("本次读取到" + count / 1024 + "KB");//本次读取到745KB
            to.write(bytes, 0, count);//只能写入实际读到的count个字节,如果把bytes全部写入,最后一次可能会写入脏数据
        }
        //关闭流释放资源
        from.close();
        to.close();
    }
}
